'''
Created on 23/10/2012

@author: Romina
'''

## -*- coding: utf-8 -*-

if 0:
    None
    import gluon
    import gluon.languages.translator as T
    from gluon.html import A, DIV, TABLE, TR, TD, SELECT, OPTION, XML, URL, INPUT, H3
    from repositories.sigecon.comunicacion import ComunicacionRepository as comunicaciones
    from repositories.sigecon.comunicacion import CondicionRepository as condiciones
    from repositories.sigecon.comunicacion import ModalidadRepository as modalidades
    from repositories.sigecon.consulta import ConsultaRepository as consultas
    from repositories.sigecon.consulta import TipoConsultaRepository as tipos
    from repositories.sigecon.consulta import SubtipoConsultaRepository as subtipos
    from repositories.sigecon.consulta import RespuestaRepository as respuestas
    from repositories.sigecon.consulta import ConsultaHistoryRepository as consultas_archive
    from repositories.sigecon.usuario import SectorRepository as sectores
    from repositories.sigecon.usuario import AuthRepository as auth

import json
import datetime
from domain.forms.sqlforms import FormFactory
from domain.entities.comunicacion import Comunicacion
from domain.entities.consulta import Consulta, ConsultaHistorico

T.force('es-es')


def load_pendientes():
    data_list = []
    rows = 0
    #se cargan todas las consultas sin finalizar del sistema
    resultados = consultas.findByFinalizado(False)
    sector = auth.get_user().sector
    #se quieren las que tengan usuarios del mismo sector que el usuario actual
    #y que no sean derivadas ya que son pendientes de otro sector
    for resultado in resultados:
        consulta = Consulta()
        consulta = resultado
        consulta.comunicacion = comunicaciones.findOne(consulta.comunicacion.ID)
        consulta.comunicacion.modalidad = modalidades.findOne(consulta.comunicacion.modalidad.ID)
        if (consulta.comunicacion.modalidad.descripcion != "MAIL") and ((consulta.sector.ID != None and consulta.sector.ID == sector.ID) or (consulta.sector.ID == None and sector.ID == auth.userById(consulta.comunicacion.usuario.ID).sector.ID)):
            consulta.comunicacion.condicion = condiciones.findOne(consulta.comunicacion.condicion.ID)
            consulta.tipo = tipos.findOne(consulta.tipo.ID)
            consulta.subtipo = subtipos.findOne(consulta.subtipo.ID)
            consulta.respuesta = respuestas.findOne(consulta.respuesta.ID)
            diccionario = dict(
                    fecha = consulta.comunicacion.fecha.strftime("%d/%m/%Y %H:%M"),
                    numero = consulta.ID,
                    nombre = consulta.comunicacion.nombre,
                    tipo = consulta.comunicacion.condicion.descripcion,
                    consulta = consulta.tipo.descripcion,
                    subconsulta = consulta.subtipo.descripcion,
                    comentario = consulta.comentario
            )
            data_list.append(diccionario)
            rows = rows + 1
    res = dict(data_list = data_list, rows = rows)
    return json.JSONEncoder().encode(res)

@auth.requires_login()  
@auth.requires_membership("PENDIENTES")   
def find():        
    form = FORM(
              BR(),
              DIV(
                  DIV(_id='tipo'),
                  DIV(_id='nombre'),
                  DIV(_id='consulta'),
                  DIV(_id='subconsulta'),
                  _id = "list-container"),
              BR(),
              BR(),
              BR(),
              BR(),
              BR(),
              BR(),
              BR(),
              BR(),
              DIV(_id = "grid")
              ,_class = "form_grilla_pendientes")

    
    response.flash = DIV(
                DIV("Puede filtrar los resultados "),
                DIV("seleccionando elementos de las listas"))

    return dict(title = T("Busqueda") + " de consultas pendientes", form = form)

 

#def sectores_por_respuesta():
#    idRespuesta = request.vars.respuesta
#    return select_sectores_por_respuesta(idRespuesta)

@auth.requires_login()  
@auth.requires_membership("PENDIENTES") 
def resolve():
    
    if len(request.args) == 0:
        raise HTTP(404)
    
    consulta_datos = consultas.findOne(request.args[0], asdict = True)
    consulta = consultas.findOne(request.args[0], asdict = False)
    
    if consulta == None:
        raise HTTP(404)
    
    consulta.comunicacion = comunicaciones.findOne(consulta.comunicacion.ID)
    consulta.comunicacion.condicion = condiciones.findOne(consulta.comunicacion.condicion.ID)
    consulta.comunicacion.modalidad = modalidades.findOne(consulta.comunicacion.modalidad.ID)
    consulta.tipo = tipos.findOne(consulta.tipo.ID)
    consulta.subtipo = subtipos.findOne(consulta.subtipo.ID)
    consulta.respuesta = respuestas.findOne(consulta.respuesta.ID)

    datos = DIV(
        DIV(LABEL("Fecha:"), consulta_datos.creado_en.strftime("%d/%m/%Y %H:%M")),
        DIV(LABEL("Numero: ") , consulta_datos.id),
        DIV(LABEL("Usuario: ") , consulta_datos.usuario.username),
        DIV(LABEL("Modalidad: "), consulta_datos.comunicacion.modalidad.descripcion),
        DIV(LABEL("Tipo: "), consulta_datos.comunicacion.condicion.descripcion),
        DIV(LABEL("Consulta: "), consulta_datos.consulta.descripcion),
        DIV(LABEL("Subconsulta: "), consulta_datos.subconsulta.descripcion),
        DIV(LABEL("Respuesta: "), consulta_datos.respuesta.descripcion),
        DIV(LABEL("Comentarios: "), consulta_datos.comentarios),
    )
    
    if (consulta.respuesta.codigo == "DERIVADA"):
        idSectorOrigen = auth.userById(consulta.usuario.ID).sector.ID
        consulta.sector = sectores.findOne(idSectorOrigen)
        datos.append(DIV(LABEL("Derivada desde: "), consulta.sector.descripcion))

    modificada = Consulta()
    modificada.ID = consulta.ID
    modificada.comunicacion = consulta.comunicacion
    modificada.tipo = consulta.tipo
    modificada.subtipo = consulta.subtipo
    modificada.respuesta = respuestas.findOne(request.vars.respuesta)
    modificada.comentario = request.vars.comentarios
    modificada.sector = sectores.findOne(request.vars.sector)
    modificada.finalizado = True
    modificada.usuario = auth.get_user()
    if modificada.respuesta and (modificada.respuesta.codigo == "DERIVADA" or modificada.respuesta.codigo == "PENDIENTE"):
        modificada.finalizado = False
    
    form = FormFactory.resolucion_pendiente(consultas.tableResolucionPendientes(modificada)) 
        
    respuesta_onchange = form.element(_name='respuesta')
    respuesta_onchange['_onchange'] = XML("ajax('" + URL(r=request, c = 'combos', f='select_sectores_por_respuesta') + "', ['respuesta'], 'div_no_table_sector__row')")
    
    form.comunicacion = consulta.comunicacion
    form.consulta = consulta.tipo
    form.subconsulta = consulta.subtipo
    
    if form.process(dbio=False).accepted:
        #modifico la consulta y guardo en el historial
        historica = ConsultaHistorico()
        historica.referencia = consulta.ID
        historica.comunicacion = consulta.comunicacion
        historica.tipo = consulta.tipo
        historica.subtipo = consulta.subtipo
        historica.respuesta = consulta.respuesta
        historica.comentario = consulta.comentario
        historica.sector = consulta.sector
        historica.finalizado = consulta.finalizado
        historica.usuario = consulta.usuario
        historica.fecha = consulta.fecha
        consultas_archive.save(entity = historica)
        consultas.update(entity = modificada)
        redirect(URL(request.application, 'pendientes', 'find'))
        session.flash = "La consulta " + str(modificada.ID) + " fue modificada"
    
    return dict(title = T("Resolucion") + " de consulta pendiente", datos = datos, form = form)
